package com.internetCafes.spms.web.certificate.service;

import com.internetCafes.spms.core.model.pageModel.DataGrid;
import com.internetCafes.spms.web.certificate.model.dto.transaction.BorrowOutReturnBatchDTO;
import com.internetCafes.spms.web.certificate.model.vo.CertificateHoldersVO;
import com.internetCafes.spms.web.certificate.entity.CertificateInfo;
import com.internetCafes.spms.web.certificate.vo.CertificateInfoVo;
import com.internetCafes.spms.web.certificate.vo.CollectInfo;

import java.util.List;
import java.util.Map;

/**
 * 证书信息表
 *
 */
public interface CertificateInfoService {

    /**
     * 删除人员证书信息
     *
     * @param id 证书id
     * @return true/false
     */
    boolean deleteById(Long id);

    /**
     * 获取所有持有的证书列表
     */
    List<CertificateInfo> getAllHandlerCerts();

    /**
     * 批量还回押证的证书
     *
     * @param dto 请求参数
     * @author Zj
     */
    void borrowOutReturnBatch(BorrowOutReturnBatchDTO dto);

    /**
     * 更具证书id列表批量更新证书信息
     *
     * @param param ids列表 需要修改的信息
     * @author Zj
     */
    void updateCertificateInfoBatch(Map<String, Object> param);

    /**
     * 根据证书编号列表获取证书信息
     *
     * @param certificateNos 证书编号
     * @return 证书信息
     * @author Zj
     */
    List<CertificateInfo> certificateInfosByNos(List<String> certificateNos);

    /**
     * 获取持证人列表
     *
     * @return 人员列表
     * @author Zj
     */
    List<CertificateHoldersVO> certificateHolders();

    /**
     * 根据证书的id列表 更新最后的id
     *
     * @param certificateIds  证书id
     * @param finalEmployeeId 最终employee的id
     * @author Zheng
     */
    void updateEmployeeIdBatch(List<Long> certificateIds, Long finalEmployeeId);

    /**
     * 通过身份证号获取相关证书数据
     *
     * @param idCards id列表
     * @return 结果
     * @author Zheng
     */
    List<CertificateInfoVo> selectInfoByIdCardsForRepeat(List<String> idCards);

    /**
     * 获取需要短信提醒的证书信息列表
     *
     * @param tenantIds 企业id
     * @return 证书信息列表
     * @author Zj
     */
    List<CertificateInfoVo> selectExpireInfo(List<Long> tenantIds);

    /**
     * 查询
     */
    List<CertificateInfo> query(Map<String, Object> params);

    /**
     * 查询当前证书是否存在
     */
    boolean getExistFlag(String certificateNo, String idCard, String profession);

    /**
     * 查询当前证书是否存在
     */
    boolean getExistFlagV2(String certificateNo, String idCard, String profession);

    /**
     * ID查询
     */
    CertificateInfo findById(Long id);

    /**
     * ID批量查询
     */
    List<CertificateInfo> queryByIds(List<Long> ids);

    /**
     * 参数分页查询
     */
    List<CertificateInfo> page(Map<String, Object> params, int page, int rows);

    /**
     * 参数查询总数
     */
    long count(Map<String, Object> params);

    long countByJobParams(Map<String, Object> params);

    /**
     * First查询
     */
    CertificateInfo findFirst(Map<String, Object> params);

    /**
     * 保存
     */
    int save(CertificateInfo certificateInfo);

    /**
     * 保存
     */
    int save(CertificateInfoVo certificateInfo);

    /**
     * 批量保存
     */
    int saveBatch(List<CertificateInfo> certificateInfoList);

    /**
     * 选择保存
     */
    int saveSelective(CertificateInfo certificateInfo);

    /**
     * 修改
     */
    int update(CertificateInfoVo certificateInfo);

    /**
     * 修改
     */
    int update(CertificateInfo certificateInfo);

    /**
     * 选择修改
     */
    int updateSelective(CertificateInfo certificateInfo);

    /**
     * 删除
     */
    int delete(Long id);

    /**
     * 批量删除
     */
    int deleteBatch(List<Long> ids);

    /**
     * 批量删除
     */
    void deleteBatch(Long[] ids);


    /**
     * DataGrid
     */
    DataGrid dataGrid(Map<String, Object> params, int pageNo, int pageSize);


    List<CertificateInfoVo> selectByJobParams(Map<String, Object> params);

    void updatePro(CertificateInfoVo certificateInfo);

    List<CollectInfo> collectAllByJobParams(Map<String, Object> params);

    List<CollectInfo> partJobCertByJobParams(Map<String, Object> params);

    List<CollectInfo> passCertByJobParams(Map<String, Object> params);

    List<CollectInfo> willPassCertByJobParams(Map<String, Object> params);

    List<CollectInfo> bringCertByJobParams(Map<String, Object> params);

    List<CollectInfo> borrowCertByJobParams(Map<String, Object> params);

    /**
     * 根据专业类型获取证书大类以及证书小类
     *
     * @param profession 专业类型
     * @return 字符串数组，[0]为证书大类,[1]为证书小类
     */
    String[] selectIdTypeByProfession(String profession);

    /**
     * 根据参数查询数据库中证书信息，原有信息中没有的数据，现有参数中有的话就进行更新
     *
     * @param params 证书参数信息
     * @return 更新条数
     */
    Integer updateCertificateIfNull(Map<String, Object> params);


    DataGrid selectByBalance(Map<String, Object> params, int pageNo, int pageSize);

    List<CertificateInfoVo> selectByBalance(Map<String, Object> params);

    List<CertificateInfoVo> getBalanceDetails(Map<String, Object> params);

    Long countBalanceDetails(Map<String, Object> params);

}
